/*!
 * \file StackTracer.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2021/04/13
 * 
 * \brief 堆栈跟踪器头文件
 * 
 * \details 本文件定义了堆栈跟踪功能的接口，用于在程序异常或崩溃时
 *          获取和输出调用堆栈信息。主要功能包括：
 *          - 跨平台的堆栈跟踪支持
 *          - 可配置的日志输出回调
 *          - 异常安全的堆栈信息获取
 *          - 与信号处理器的集成支持
 *          
 *          支持的平台：
 *          - Windows：使用Windows API和调试符号
 *          - Linux/Unix：使用标准库函数
 */
#pragma once

#ifdef _WIN32
#include <cstdio>
#include <Windows.h>
#include <Psapi.h>
#else
#include <stdio.h>
#endif // _WIN32

#include <functional>

/*!
 * \typedef TracerLogCallback
 * \brief 堆栈跟踪日志回调函数类型
 * 
 * \details 用于输出堆栈跟踪信息的回调函数类型定义。
 *          该回调函数接收一个字符串参数，包含堆栈跟踪的一行信息。
 *          
 *          使用场景：
 *          - 将堆栈信息输出到日志文件
 *          - 将堆栈信息发送到远程服务器
 *          - 在控制台显示堆栈信息
 *          - 自定义的错误处理流程
 * 
 * \param const char* 堆栈跟踪信息字符串
 */
typedef std::function<void(const char*)> TracerLogCallback;

/*!
 * \brief 打印堆栈跟踪信息
 * 
 * \details 获取当前线程的调用堆栈信息，并通过回调函数输出。
 *          该函数会：
 *          1. 获取当前线程的调用堆栈
 *          2. 解析堆栈中的函数名和地址信息
 *          3. 格式化堆栈信息为可读字符串
 *          4. 通过回调函数逐行输出堆栈信息
 *          
 *          输出格式通常包括：
 *          - 函数名称
 *          - 模块名称
 *          - 内存地址
 *          - 源文件和行号（如果有调试信息）
 * 
 * \param cb 日志回调函数，用于输出堆栈跟踪信息
 * 
 * \note 该函数是异常安全的，即使在程序崩溃时也能正常工作
 * \warning 在某些情况下可能无法获取完整的堆栈信息
 * \see TracerLogCallback
 */
void print_stack_trace(TracerLogCallback cb);

